package com.dtx.abstractfactory;

import com.dtx.abstractfactory.factory.Factory;
import com.dtx.abstractfactory.factory.Link;
import com.dtx.abstractfactory.factory.Page;
import com.dtx.abstractfactory.factory.Tray;

/**
 * 在理解了抽象的零件,产品,工厂的代码后,我们来看看Main类的代码。
 * Main类使用抽象工厂生产零件并将零件组装成产品。Main类中只引入了factory包,从这可以看出,
 * 该类并没有任何具体零件,产品和工厂。
 * 具体工厂的类名是通过命令行来指定的。例如,如果要使用listfactory包中的ListFactory类,
 * 可以在命令中输入以下命令。
 *
 * java Main listfactory.ListFactory
 *
 * Main类会使用getFactory方法生成该参数(arg[0])对应的工厂,并将其保存在factory变量中。
 * 之后,Main类会使用factory生成Link和Tray,然后将Link和Tray都放入Tray中,最后生成Page并将生成结果输出至文件。
 *
 */
public class AbstractFactoryMain {

    public static void main(String[] args) {

        //生成LinkPage文件
        args = new String[]{"com.dtx.abstractfactory.listfactory.ListFactory"};

        //生成TablePage文件
        //args = new String[]{"com.dtx.abstractfactory.tablefactory.TableFactory"};

        if (args.length != 1) {
            System.out.println("Usage: java Main class.name.of.ConcreteFactory");
            System.out.println("Example 1 : java Main listfactory.ListFactory");
            System.out.println("Example 1 : java Main tablefactory.TableFactory");
            System.exit(0);
        }

        Factory factory = Factory.getFactory(args[0]);

        Link people = factory.createLink("人民日报", "http://www.people.com.cn/");
        Link gmw = factory.createLink("光明日报", "http://www.gmw.cn/");

        Link usYahoo = factory.createLink("Yahoo!", "http://www.yahoo.com/");
        Link jpYahoo = factory.createLink("Yahoo!Japan", "http://www.yahoo.co.jp/");
        Link excite = factory.createLink("Excite", "http://www.excite.com/");
        Link google = factory.createLink("Google", "http://www.google.com/");

        Tray trayNews = factory.createTray("日报");
        trayNews.add(people);
        trayNews.add(gmw);

        Tray trayYahoo = factory.createTray("Yahoo!");
        trayYahoo.add(usYahoo);
        trayYahoo.add(jpYahoo);

        Tray traySearch = factory.createTray("检索引擎");
        traySearch.add(trayYahoo);
        traySearch.add(excite);
        traySearch.add(google);

        Page page = factory.createPage("LinkPage", "杜嘟嘟");
        //Page page = factory.createPage("TablePage", "杜嘟嘟");
        page.add(trayNews);
        page.add(traySearch);
        page.output();
    }


}
